"use client"; import {fetchApi, fetchFile} from "@/app/_modules/func"; import {DeleteOutlined, ExclamationCircleFilled, PlusOutlined, ReloadOutlined,} from "@ant-design/icons"; import type {ActionType, ProColumns, ProFormInstance,} from "@ant-design/pro-components"; import { ModalForm, PageContainer, ProForm, ProFormDigit, ProFormRadio, ProFormSelect, ProFormText, ProFormTextArea, ProTable, } from "@ant-design/pro-components"; import {Button, Modal, Space, Tag} from "antd"; import {useRouter} from "next/navigation"; import {faCheck, faDownload, faPenToSquare, faToggleOff, faToggleOn, faXmark,} from "@fortawesome/free-solid-svg-icons"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {useRef, useState} from "react"; import globalMessage from "@/app/_modules/globalMessage"; //查询类型详情 const queryTypeAPI = "/api/system/dict/type"; //查询所有类型列表 const queryTypeListAPI = "/api/system/dict/type/optionselect"; //查询表格数据API const queryAPI = "/api/system/dict/data/list"; //新建数据API const newAPI = "/api/system/dict/data"; //修改数据API const modifyAPI = "/api/system/dict/data"; //查询详情数据API const queryDetailAPI = "/api/system/dict/data"; //删除API const deleteAPI = "/api/system/dict/data"; //导出API const exportAPI = "/api/system/dict/data/export"; //导出文件前缀名 const exportFilePrefix = "data"; export default function DictData({ params }: { params: { dictid: string } }) { const { push } = useRouter(); // 添加用于控制删除确认模态框的状态 const [deleteModalVisible, setDeleteModalVisible] = useState(false); const [deleteDictCode, setDeleteDictCode] = useState(null); const [defaultType, setDefaultType] = useState(""); //获取对应的字典类型的值 const getTypeData = async () => { const resp = await fetchApi(`${queryTypeAPI}/${params.dictid}`, push); if (resp != undefined) { if (searchTableFormRef.current) { searchTableFormRef.current.setFieldsValue({ dictType: resp.data.dictType, }); } setDefaultType(resp.data.dictType); return resp.data.dictType; } return ""; }; //查询字典类型列表 const getTypeList = async () => { const dataArray: Array = new Array(); const resp = await fetchApi(queryTypeListAPI, push); if (resp != undefined) { resp.data.forEach((item: any) => { const type = { label: item.dictName, value: item.dictType, }; dataArray.push(type); }); } return dataArray; }; //表格列定义 const columns: ProColumns[] = [ { title: "字典名称", dataIndex: "dictType", valueType: "select", fieldProps: { allowClear: false, }, request: getTypeList, hideInTable: true, order: 3, }, { title: "数据编码", dataIndex: "dictCode", search: false, }, { title: "数据标签", fieldProps: { placeholder: "请输入数据标签", }, dataIndex: "dictLabel", order: 2, render: (_, record) => { const isTag = record.listClass === ""; let tagColor = "default"; if (record.listClass === "") { return _; } else { switch (record.listClass) { case "default": tagColor = "processing"; break; case "primary": tagColor = "processing"; break; case "success": tagColor = "success"; break; case "info": tagColor = "default"; break; case "warning": tagColor = "warning"; break; case "danger": tagColor = "error"; break; default: tagColor = "processing"; break; } return ( {_} ); } }, }, { title: "数据键值", dataIndex: "dictValue", search: false, }, { title: "数据排序", dataIndex: "dictSort", sorter: true, search: false, }, { title: "状态", fieldProps: { placeholder: "请选择数据状态", }, dataIndex: "status", valueType: "select", render: (_, record) => { return ( ) : ( ) } > {_} ); }, valueEnum: { 0: { text: "正常", status: "0", }, 1: { text: "停用", status: "1", }, }, order: 1, }, { title: "备注", dataIndex: "remark", search: false, }, { title: "创建时间", dataIndex: "createTime", valueType: "dateTime", search: false, }, { title: "操作", key: "option", search: false, render: (_, record) => [ , , ], }, ]; //0.查询表格数据 const queryTableData = async (params: any, sorter: any, filter: any) => { const searchParams = { pageNum: params.current, ...params, }; delete searchParams.current; const queryParams = new URLSearchParams(searchParams); //如果没有带上默认的字典类型,查询绑定上 if (!("dictType" in searchParams)) { const defaultType = await getTypeData(); queryParams.append("dictType", defaultType); } Object.keys(sorter).forEach((key) => { queryParams.append("orderByColumn", key); if (sorter[key] === "ascend") { queryParams.append("isAsc", "ascending"); } else { queryParams.append("isAsc", "descending"); } }); const body = await fetchApi(`${queryAPI}?${queryParams}`, push); return body; }; //1.新建 //确定新建数据 const executeAddData = async (values: any) => { const body = await fetchApi(newAPI, push, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(values), }); if (body != undefined) { if (body.code == 200) { globalMessage.success(body.msg); if (actionTableRef.current) { actionTableRef.current.reload(); } return true; } globalMessage.error(body.msg); return false; } return false; }; //2.修改 //是否展示修改对话框 const [isShowModifyDataModal, setIsShowModifyDataModal] = useState(false); //展示修改对话框 const onClickShowRowModifyModal = (record?: any) => { queryRowData(record); setIsShowModifyDataModal(true); }; //修改数据表单引用 const modifyFormRef = useRef(null); //操作当前数据的附加数据 const [operatRowData, setOperateRowData] = useState<{ [key: string]: any; }>({}); //查询并加载待修改数据的详细信息 const queryRowData = async (record?: any) => { const dictCode = record !== undefined ? record.dictCode : selectedRow.dictCode; operatRowData["dictCode"] = dictCode; setOperateRowData(operatRowData); if (dictCode !== undefined) { const body = await fetchApi(`${queryDetailAPI}/${dictCode}`, push); if (body !== undefined) { if (body.code == 200) { modifyFormRef?.current?.setFieldsValue({ //需要加载到修改表单中的数据 dictType: body.data.dictType, dictLabel: body.data.dictLabel, dictValue: body.data.dictValue, dictSort: body.data.dictSort, status: body.data.status, listClass: body.data.listClass, cssClass: body.data.cssClass, remark: body.data.remark, }); } } } }; //确认修改数据 const executeModifyData = async (values: any) => { values["dictCode"] = operatRowData["dictCode"]; const body = await fetchApi(modifyAPI, push, { method: "PUT", headers: { "Content-Type": "application/json", }, body: JSON.stringify(values), }); if (body !== undefined) { if (body.code == 200) { globalMessage.success(body.msg); //刷新列表 if (actionTableRef.current) { actionTableRef.current.reload(); } setIsShowModifyDataModal(false); return true; } globalMessage.error(body.msg); return false; } }; //3.删除 //点击删除按钮,展示删除确认框 const onClickDeleteRow = (record?: any) => { const dictCode = record !== undefined ? record.dictCode : selectedRowKeys.join(","); setDeleteDictCode(dictCode); setDeleteModalVisible(true); }; //确定删除选中的数据 const executeDeleteRow = async () => { if (deleteDictCode === null) return; const body = await fetchApi(`${deleteAPI}/${deleteDictCode}`, push, { method: "DELETE", }); if (body !== undefined) { if (body.code == 200) { globalMessage.success("删除成功"); //修改按钮变回不可点击 setRowCanModify(false); //删除按钮变回不可点击 setRowCanDelete(false); //选中行数据重置为空 setSelectedRowKeys([]); //刷新列表 if (actionTableRef.current) { actionTableRef.current.reload(); } } else { globalMessage.error(body.msg); } } setDeleteModalVisible(false); setDeleteDictCode(null); }; //4.导出 //导出表格数据 const exportTable = async () => { if (searchTableFormRef.current) { const formData = new FormData(); const data = { pageNum: page, pageSize: pageSize, ...searchTableFormRef.current.getFieldsValue(), }; Object.keys(data).forEach((key) => { if (data[key] !== undefined) { formData.append(key, data[key]); } }); await fetchFile( exportAPI, push, { method: "POST", body: formData, }, `${exportFilePrefix}_${new Date().getTime()}.xlsx` ); } }; //5.选择行 //选中行操作 const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [selectedRow, setSelectedRow] = useState(undefined as any); //修改按钮是否可用,选中行时才可用 const [rowCanModify, setRowCanModify] = useState(false); //删除按钮是否可用,选中行时才可用 const [rowCanDelete, setRowCanDelete] = useState(false); //ProTable rowSelection const rowSelection = { onChange: (newSelectedRowKeys: React.Key[], selectedRows: any[]) => { setSelectedRowKeys(newSelectedRowKeys); setRowCanDelete(newSelectedRowKeys && newSelectedRowKeys.length > 0); if (newSelectedRowKeys && newSelectedRowKeys.length == 1) { setSelectedRow(selectedRows[0]); setRowCanModify(true); } else { setRowCanModify(false); setSelectedRow(undefined); } }, //复选框的额外禁用判断 // getCheckboxProps: (record) => ({ // disabled: record.userId == 1, // }), }; //搜索栏显示状态 const [showSearch, setShowSearch] = useState(true); //action对象引用 const actionTableRef = useRef(null); //搜索表单对象引用 const searchTableFormRef = useRef(null!); //当前页数和每页条数 const [page, setPage] = useState(1); const defaultPageSize = 10; const [pageSize, setPageSize] = useState(defaultPageSize); const pageChange = (page: number, pageSize: number) => { setPage(page); setPageSize(pageSize); }; return ( { // 表单搜索项会从 params 传入,传递给后端接口。 const data = await queryTableData(params, sorter, filter); if (data !== undefined) { return Promise.resolve({ data: data.rows, success: true, total: data.total, }); } return Promise.resolve({ data: [], success: true, }); }} pagination={{ defaultPageSize: defaultPageSize, showQuickJumper: true, showSizeChanger: true, onChange: pageChange, }} search={ showSearch ? { defaultCollapsed: false, searchText: "搜索", } : false } dateFormatter="string" actionRef={actionTableRef} toolbar={{ actions: [ } type="primary"> 新建 } autoFocusFirstInput modalProps={{ destroyOnHidden: true, }} submitTimeout={2000} onFinish={executeAddData} > , } disabled={!rowCanModify} onClick={() => onClickShowRowModifyModal()} > 修改 } open={isShowModifyDataModal} autoFocusFirstInput modalProps={{ destroyOnHidden: true, onCancel: () => { setIsShowModifyDataModal(false); }, }} submitTimeout={2000} onFinish={executeModifyData} > , , , ], settings: [ { key: "switch", icon: showSearch ? ( ) : ( ), tooltip: showSearch ? "隐藏搜索栏" : "显示搜索栏", onClick: (key: string | undefined) => { setShowSearch(!showSearch); }, }, { key: "refresh", tooltip: "刷新", icon: , onClick: (key: string | undefined) => { if (actionTableRef.current) { actionTableRef.current.reload(); } }, }, ], }} /> {/* 删除确认模态框 */} 系统提示 } open={deleteModalVisible} onOk={executeDeleteRow} onCancel={() => { setDeleteModalVisible(false); setDeleteDictCode(null); }} okText="确认" cancelText="取消" >

{`确定删除字典编码为“${deleteDictCode}”的数据项?`}

); }